/**
 * Copyright (C) 2025 ROKAE (Beijing) Technology Co., LTD.
 * All Rights Reserved.
 *
 * Information in this file is the intellectual property of Rokae Technology Co., Ltd,
 * And may contains trade secrets that must be stored and viewed confidentially.
 *
 * @file StatusPoller.h
 * @brief 周期性查询设备状态的工具类
 */
#ifndef STATUSPOLLER_H
#define STATUSPOLLER_H

#include <QObject>
#include <QTimer>
#include <QMutex>
#include <QJsonObject>
#include <QJsonArray>

#include "plugincommon.h"
#include "interface/interfacemanager.h"

// 周期性查询设备状态的工具类
class StatusPoller : public QObject
{
    Q_OBJECT
public:
    explicit StatusPoller(QObject *parent = nullptr);

    /**
    * @brief 设置设备ID（slave_id）
    * @param id 设备 ID
    */
    void setDeviceId(int id);

    /**
    * @brief 设置初始化状态标志
    * @param status 是否已初始化
    */
    void setInit(bool status);

    /**
    * @brief 开启定时器
    */
    void openTimer();

    /**
    * @brief 关闭定时器
    */
    void closeTimer();

signals:
    /**
    * @brief 状态更新信号，通知主线程更新 UI
    * @param result 获取到的状态 JSON 对象
    */
    void statusUpdated(QJsonObject result);

public slots:
    /**
    * @brief 启动轮询
    * 创建一个定时器，每 200ms 查询一次状态
    */
    void startPolling();

    /**
    * @brief 执行一次状态查询
    * 若未初始化，则直接返回
    */
    void pollStatus();

private:
    int m_device_id;
    bool m_is_init;     // 电爪是否已初始化
    QTimer* m_timer;
};

#endif // STATUSPOLLER_H
